Scripts Maintaining Insertion Order#182
Merged
Causeless merged 2 commits intodevelopmentfrom Feb 20, 2025
Merged
Conversation
…ordered map from script name to enabled state, however this doesn't guarantee maintained order, causing script failure. An ordered map wouldn't work because it requires a comparison function, when the order needs to be determined by insertion order. It seems like it may as well be handled with a vector of script names, while maintaining the unordered map of script name to enabled state. However, each script name is recorded twice there (this is also what I have implemented, it works). Probably the best solution would be to just keep a vector of script name and a vector of corresponding enabled states, however the efficiency of searching goes from log of size to linear with position, which seems bad, but nothing should ever have enough scripts on it to be a problem, is what I imagine. Feels like I'm missing the optimal solution.
Contributor
|
don't know enough c++ to comment on the technicalities but can confirm this keeps script order in-game by repeating steps in my mods that would previously break the order (and now they don't). @Causeless ? |
Contributor
|
You could do a Might technically even be slightly faster as well, std::unordered_map performance is notoriously abysmal. Especially at these small entry numbers |
Causeless
approved these changes
Feb 19, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Previously, scripts were recorded with an unordered map from script name to enabled state, however this doesn't guarantee maintained order, causing script failure when behavior in the Create function (or elsewhere) of one script depends on the behavior of other scripts, which may be scheduled in certain circumstances to occur too late. An ordered map wouldn't work because it requires a comparison function, when the order needs to be determined by insertion order. It seems like it may as well be handled with a vector of script names, while maintaining the unordered map of script name to enabled state. However, each script name is recorded twice here (this is also what I have implemented, it works). It seems somehow less than ideal.